9285: evaluate Assignment operator with different data type
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(secstate.x=8,8)
TestDRMEvaluateExpression(secstate.x="Play")=-2147216362(0X80041416, CPRMEXP_WRONG_TYPE_OPERAND)
TestDRMEvaluateExpression(secstate.x = #20000202 13:00:24Z#)= -2147216367(0X80041411, CPRMEXP_UPDATE_FAILURE)

9287: should evaluate the machine variable correctly
TestLicEvalContextSetting(0,valid)
''TestDRMEvaluateExpression(machine.datetime,20000202 13:00:24Z)
TestDRMEvaluateExpression(machine.,0)=-2147216378(CPRMEXP_INVALID_VARIABLE )

9288: should evaluate the drm variables 
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(drm.version=="2.0.0.0",1)
'TestDRMEvaluateExpression(drm.bb.msdrm.version=="2.3.101.0",1)
TestDRMEvaluateExpression(drm.bb.msdrm.version=="2.3.0.2",1)

9294: evaluate drmk variable correctly
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(secstate.x=drmk.version,1)=-2147216368(0X80041410,CPRMEXP_RETRIEVAL_FAILURE)

9301: evaluate app variables correctly
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(app.minseclevel >= 150,1)
TestDRMEvaluateExpression(app.count>=1,1)
TestDRMEvaluateExpression(app.subjid == 42,1)

9303: evaluate secstate variables correctly
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(secstate.playcount=1;secstate.playcount==1,1)

9330: deletelicense works
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression("deletelicense()", 1)

9284: evaluate Assignment operator with same type
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(secstate.global.saveddatetime = machine.datetime)

9297: evaluate content variables correctly
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(content.LAINFO,"http://v2srv/WM/getv2lic.asp")

9299: evaluate License variables correctly
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(license.META.NAME,"License for Titatic")

9311: min function works correctly
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression("min(1,2)",1)
TestDRMEvaluateExpression("min(2,1)",1)
TestDRMEvaluateExpression("min(0,0)",0)
TestDRMEvaluateExpression("min(-3,-4)",-4)
TestDRMEvaluateExpression("min(-3,2)",-3)
TestDRMEvaluateExpression("secstate.x = 4; secstate.y=5;min(secstate.x,secstate.y)",4)

9313: max function works correctly
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression("max(1,2)",2)
TestDRMEvaluateExpression("max(2,1)",2)
TestDRMEvaluateExpression("max(0,0)",0)
TestDRMEvaluateExpression("max(-3,-4)",-3)
TestDRMEvaluateExpression("max(-3,2) ",2)

9316:dateadd function works
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression("dateadd(\"d\",1,#20000226 12:00:00Z#)==#20000227 12:00:00Z#",1)
TestDRMEvaluateExpression("secstate.date = #20000226 12:00:00Z#;secstate.date2  = dateadd(\"d\",1,secstate.date)",#20000227 12:00:00Z#)
TestDRMEvaluateExpression("dateadd(\"d\",1,#20000226 12:00:00Z#)",20000227 12:00:00Z)

9318: datediff function works correctly
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression("datediff(\"d\",#20000101 12:00:00Z#,#20000102 12:00:00Z#)",1)
TestDRMEvaluateExpression("datediff(\"d\",#20000102 12:00:00Z#,#20000101 12:00:00Z#)",-1)
TestDRMEvaluateExpression("datediff(\"h\",#20000102 12:00:00Z#,#20000101 12:00:00Z#)",-24)
TestDRMEvaluateExpression("datediff(\"h\",#20000101 12:00:00Z#,#20000102 12:00:00Z#)",24)
TestDRMEvaluateExpression("datediff(\"n\",#20000102 12:00:00Z#,#20000101 12:00:00Z#)",-1440)
TestDRMEvaluateExpression("datediff(\"n\",#20000101 12:00:00Z#,#20000102 12:00:00Z#)",1440)
TestDRMEvaluateExpression("datediff(\"s\",#20000102 12:00:00Z#,#20000101 12:00:00Z#)",-86400)
TestDRMEvaluateExpression("datediff(\"s\",#20000101 12:00:00Z#,#20000102 12:00:00Z#)",86400)
TestDRMEvaluateExpression("datediff(\"d\",#20000101 12:00:00Z#,#20000101 12:00:00Z#)",0)
TestDRMEvaluateExpression("datediff(\"h\",#20000101 12:00:00Z#,#20000101 12:00:00Z#)",0)
TestDRMEvaluateExpression("datediff(\"n\",#20000101 12:00:00Z#,#20000101 12:00:00Z#)",0)
TestDRMEvaluateExpression("datediff(\"s\",#20000101 12:00:00Z#,#20000101 12:00:00Z#)",0)

9320: datepart function works correctly
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression("datepart(\"y\",#20030112 15:55:21Z#)",2003)
TestDRMEvaluateExpression("datepart(\"m\",#20030112 15:55:21Z#)",1)
TestDRMEvaluateExpression("datepart(\"d\",#20030112 15:55:21Z#)",12)
TestDRMEvaluateExpression("datepart(\"h\",#20030112 15:55:21Z#)",15)
TestDRMEvaluateExpression("datepart(\"n\",#20030112 15:55:21Z#)",55)
TestDRMEvaluateExpression("datepart(\"s\",#20030112 15:55:21Z#)",21)

9321: datepart function works correctly
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression("datepart(\"y\",#200030112 15:55:21Z#)",20003)=-2147216379(CPRMEXP_INVALID_CONSTANT)
TestDRMEvaluateExpression("datepart(\"years\",#20030112 15:55:21Z#)",2003)=-2147216376(CPRMEXP_INVALID_ARGUMENT)
TestDRMEvaluateExpression("datepart(\"Y\",#20030112 15:55:21Z#)",2003)=-2147216376(CPRMEXP_INVALID_ARGUMENT)
TestDRMEvaluateExpression("datepart(\"h\",#20000112 25:55:21Z#)",25)=-2147216379(CPRMEXP_INVALID_CONSTANT)
TestDRMEvaluateExpression("datepart(\"n\",#20000112 25:61:21Z#)",61)=-2147216379(CPRMEXP_INVALID_CONSTANT)
TestDRMEvaluateExpression("datepart(\"s\",#20000112 25:61:001Z#)",1)=-2147216379(CPRMEXP_INVALID_CONSTANT)

'' BUGBUG: index function no longer supported
''9322: index function works correctly
''TestLicEvalContextSetting(0,valid)
''TestDRMEvaluateExpression("index(\"a\",\"abcde\")",0)
''TestDRMEvaluateExpression("index(\"f\",\"abcdef\")",5)


'' BUGBUG: length function no longer supported
''9324: length function works
''TestLicEvalContextSetting(0,valid)
''TestDRMEvaluateExpression("length(\"1234567890\")",10)
''TestDRMEvaluateExpression("length(\"\")",0)

9326: test exists function working correctly
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression("exists(machine.datetime)",1)
TestDRMEvaluateExpression("exists(machine.date)",0)
TestDRMEvaluateExpression("exists(drm.version)",1)
TestDRMEvaluateExpression("exists(drm.bb.msdrm.version)",1)
TestDRMEvaluateExpression("exists(thisisnotvar)",0)
TestDRMEvaluateExpression("!exists(secstate.deleted) && (app.minseclevel >= 150?1:(secstate.drmreason=3;0))",1)

9332: verify that versioncompare function works
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression("versioncompare(drm.version, \"2.0.0.0\") == 0",1)
TestDRMEvaluateExpression("versioncompare(\"2.0.0.0\",\"2.0.0.0\")==0",1)
TestDRMEvaluateExpression("versioncompare(drm.bb.msdrm.version,\"2.3.0.2\")==0",1)

9345: evaluate operator '+' correctly
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(1?1+1:4-1,2)
TestDRMEvaluateExpression(1+1,2)
TestDRMEvaluateExpression(0+0,0)
''TestDRMEvaluateExpression(secstate.a = 1;secstate.b = 1;secstate.a+secstate.b,2)

''BUGBUG...3213 resolved by design
9691: evaluate secstate variables correctly
TestLicEvalContextSetting(0,valid)
''TestDRMEvaluateExpression(secstate.x="a"+"b",ab)
''TestDRMEvaluateExpression("~!@"+"$%^",~!@$%^)
TestDRMEvaluateExpression(-1+3,2)

9692: evaluates '-' operator correctly
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(1-1,0)
TestDRMEvaluateExpression(0-0,0)
TestDRMEvaluateExpression("0-(-1)",1)
TestDRMEvaluateExpression("-1-1",-2)

9693: evaluates ''*'' operator correctly
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(3*2,6)
TestDRMEvaluateExpression(0*0,0)
TestDRMEvaluateExpression(0*-1,0)
TestDRMEvaluateExpression(5*-4,-20)
TestDRMEvaluateExpression(1*0,0)
TestDRMEvaluateExpression("(-1)*3",-3)
TestDRMEvaluateExpression("(-2)*-3",6)

9694: evaluates / operator correctly
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(0/3,0)
TestDRMEvaluateExpression(10/3,3)
TestDRMEvaluateExpression(10/-3,-3)
TestDRMEvaluateExpression("(-10)/3",-3)
TestDRMEvaluateExpression("(-10)/-3",3)
TestDRMEvaluateExpression(1/0,1)=-2147216372(CPRMEXP_OVERFLOW)
TestDRMEvaluateExpression(10/2,5)

9695: evaluates % operator correctly
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(3%0,0)=-2147216372(CPRMEXP_OVERFLOW)
TestDRMEvaluateExpression(0%3,0)
TestDRMEvaluateExpression(3%5,3)
TestDRMEvaluateExpression(5%-3,2)
TestDRMEvaluateExpression(5%3,2)
TestDRMEvaluateExpression("(-5)%3",-2)
TestDRMEvaluateExpression("(-5)%-3",-2)

9696: DRMEvaluateExpression: evaluates conditional operators larger, larger or equal, smaller, smaller or equal, equal, not equal correctly
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(3>0,1)
TestDRMEvaluateExpression(0>3,0)
TestDRMEvaluateExpression("(-1)<0",1)
TestDRMEvaluateExpression("(-1)>(-2)",1)
TestDRMEvaluateExpression(3>=0,1)
TestDRMEvaluateExpression("(-1)<=0",1)
TestDRMEvaluateExpression(0>=0,1)
TestDRMEvaluateExpression(3>=3,1)
TestDRMEvaluateExpression(3<=3,1)
TestDRMEvaluateExpression(2>=3,0)
TestDRMEvaluateExpression(3<=2,0)
TestDRMEvaluateExpression(3==3,1)
TestDRMEvaluateExpression(2!=3,1)
TestDRMEvaluateExpression(2!=2,0)
TestDRMEvaluateExpression(2==-2,0)
TestDRMEvaluateExpression(2!=-2,1)

9697: evaluates () operators correctly
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(3+4*2,11)
TestDRMEvaluateExpression("(3+4)*2",14)

9698: evaluates '!' operators correctly
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(!1,0)
TestDRMEvaluateExpression(!0,1)
TestDRMEvaluateExpression(!-2,0)
TestDRMEvaluateExpression(!5,0)
TestDRMEvaluateExpression(!!1,1)
TestDRMEvaluateExpression(!!0,0)

9699: evaluates 'AND' operators correctly
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(1 && 0,0)
TestDRMEvaluateExpression(1 && 1,1)
TestDRMEvaluateExpression(0 && 0,0)
TestDRMEvaluateExpression(0 && 1,0)
TestDRMEvaluateExpression("(-1) && 1",1)
TestDRMEvaluateExpression(0 && -1,0)

9700:  evaluates || operators correctly
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(1 || 0,1)
TestDRMEvaluateExpression(1 || 1,1)
TestDRMEvaluateExpression(0 || 0,0)
TestDRMEvaluateExpression(0 || 1,1)
TestDRMEvaluateExpression("(-1) || 1",1)
TestDRMEvaluateExpression(0 || -1,1)

9701: evaluates ; operators correctly
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(1;2,2)
TestDRMEvaluateExpression(drm.version=="2.0.0.0";drm.bb.msdrm.version=="2.3.0.2",1)
TestDRMEvaluateExpression("(-2);3",3)

9702: evaluates ? operators correctly
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(1? 1:0,1)
TestDRMEvaluateExpression(1? 0:1,0)
TestDRMEvaluateExpression(0?1:0,0)
TestDRMEvaluateExpression(0?0:1,1)
TestDRMEvaluateExpression(3?1:0,1)
TestDRMEvaluateExpression(3?0:1,0)

9703: evaluates operator precedence  correctly
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(4+3*2,10)
TestDRMEvaluateExpression(4-3*2,-2)
TestDRMEvaluateExpression(4-2/2,3)
TestDRMEvaluateExpression(4+2/2,5)
TestDRMEvaluateExpression(4 > 5 -2,1)
TestDRMEvaluateExpression(4 < 5 -2,0)
TestDRMEvaluateExpression(4 >= 5 -2,1)
TestDRMEvaluateExpression(4 <= 5-2,0)
TestDRMEvaluateExpression(!1+2,2)
TestDRMEvaluateExpression(!1 > 0,0)
TestDRMEvaluateExpression(12%2 > 1,0)
''TestDRMEvaluateExpression(1 || 0 ? 1:0,1)
TestDRMEvaluateExpression(!1 > 0,0)
TestDRMEvaluateExpression(!1 > 0,0)

-------------------BVT ends here--------------------------

9286: invalid Assignment statement should fail
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(4=secstate.x,4)=-2147216369(CPRMEXP_VARIABLE_EXPECTED)

9290: drm.version does not support update 
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(drm.version="2.0.0.1")=-2147216365(0X80041413, CPRMEXP_UPDATE_UNSUPPORTED)
TestDRMEvaluateExpression(drm.version=2001)=-2147216365(0X80041413, CPRMEXP_UPDATE_UNSUPPORTED)

9289: machine.datetime does not support update 
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(machine.datetime=#20000202 12:00:00Z#)=-2147216365(CPRMEXP_UPDATE_UNSUPPORTED)

'9291: evaluate pmlicense variables correctly
'TestLicEvalContextSetting(0,valid)
'TestDRMEvaluateExpression(secstate.x=pmlicense.expirydate)
'TestDRMEvaluateExpression(secstate.x=pmlicense.rights)
'TestDRMEvaluateExpression(pmlicense.appseclevel==500,1)
'TestDRMEvaluateExpression(secstate.x=pmlicense.version)

'9292: handles invalid pmlicense variables correctly 
'TestLicEvalContextSetting(0,valid)
'TestDRMEvaluateExpression(pmlicense.expirydate = machine.datetime)=-2147467263(DRM_E_NOTIMPL)
'TestDRMEvaluateExpression(pmlicense.rights = 0xfff,1)=-2147467263(DRM_E_NOTIMPL)
'TestDRMEvaluateExpression(pmlicense.appseclevel = 1000,1)=-2147467263(DRM_E_NOTIMPL)
'TestDRMEvaluateExpression(pmlicense.version = "1.2.3.4",1)=-2147467263(DRM_E_NOTIMPL)
'TestDRMEvaluateExpression(pmlicense.,1)=-2147467259(DRM_E_FAIL)
'TestDRMEvaluateExpression(pmlicense = 1,1)=-2147216378(CPRMEXP_INVALID_VARIABLE)
'TestDRMEvaluateExpression(pmlicense. = 1,1)=-2147216378(CPRMEXP_INVALID_VARIABLE)
'TestDRMEvaluateExpression(pmlicense,1)=-2147467259(DRM_E_FAIL)

9293: handles invalid drmk variables correctly 
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(drmk.parameter,1)=-2147216368(0X80041410,CPRMEXP_RETRIEVAL_FAILURE)
TestDRMEvaluateExpression(drmk,1)=-2147216378(CPRMEXP_INVALID_VARIABLE)
TestDRMEvaluateExpression(drmk.,1)=-2147216378(CPRMEXP_INVALID_VARIABLE)
TestDRMEvaluateExpression(drmk.version = 1234)=-2147216365(0X80041413, CPRMEXP_UPDATE_UNSUPPORTED)

'''BUGBUG...device.name not implement
9295: evaluate device variables correctly
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(secstate.x=device.name,1)=-2147467263(DRM_E_NOTIMPL)

9296: handle invalid device variables gracefully
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(secstate.x=device,1)=-2147216378(CPRMEXP_INVALID_VARIABLE)
TestDRMEvaluateExpression(secstate.x=device.,1)=-2147216378(CPRMEXP_INVALID_VARIABLE)
TestDRMEvaluateExpression(secstate.x=device.novar,1)=-2147467263(DRM_E_NOTIMPL)

9298: evaluate invalid content variables with correct error codes
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(secstate.x=content)=-2147216378(CPRMEXP_INVALID_VARIABLE)
TestDRMEvaluateExpression(secstate.x=content.)=-2147216378(CPRMEXP_INVALID_VARIABLE)
TestDRMEvaluateExpression(secstate.x=content.novar)=-2147216368(CPRMEXP_RETRIEVAL_FAILURE)

9300: handle invalid license variables correctly
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(secstate.x=license)=-2147216378(CPRMEXP_INVALID_VARIABLE)
TestDRMEvaluateExpression(secstate.x=license.)=-2147216378(CPRMEXP_INVALID_VARIABLE)
TestDRMEvaluateExpression(secstate.x=license.novar)=-2147216368(CPRMEXP_RETRIEVAL_FAILURE)

9302: handle invalid app variables gracefully
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(secstate.x=app,1)=-2147216378(CPRMEXP_INVALID_VARIABLE)
TestDRMEvaluateExpression(secstate.x=app.,1)=-2147216378(CPRMEXP_INVALID_VARIABLE)
TestDRMEvaluateExpression(secstate.x=app.novar,1)=-2147216368(CPRMEXP_RETRIEVAL_FAILURE)
TestDRMEvaluateExpression(secstate.x=app.count1,1)=-2147216368(CPRMEXP_RETRIEVAL_FAILURE)

9312: min function handle invalid data gracefully
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression("min(0.1,0.2)",0.1)=-2147216380(CPRMEXP_INVALID_TOKEN )
TestDRMEvaluateExpression("min(Astring,2)",2)=-2147216378(CPRMEXP_INVALID_VARIABLE )
TestDRMEvaluateExpression("min(#19991231 09:00#,#19991230 09:00# )",#19991230 09:00#)=-2147216379(CPRMEXP_INVALID_CONSTANT)
TestDRMEvaluateExpression("min(2.0.0.0,2.3.0.0)","2.0.0.0")=-2147216380(CPRMEXP_INVALID_TOKEN )
TestDRMEvaluateExpression("min(\"a\",\"b\")",a)=-2147216362(CPRMEXP_WRONG_TYPE_OPERAND)
TestDRMEvaluateExpression("min(1/0,0)",0)=-2147216372(CPRMEXP_OVERFLOW)

9315:max function for invalid data fails gracefully	
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression("max(-2147483649,2147483648)",2147483648)=-2147216372(CPRMEXP_OVERFLOW)
TestDRMEvaluateExpression("max(2,1,0)",2)=-2147216370(CPRMEXP_INCORRECT_NUM_ARGS)
TestDRMEvaluateExpression("max(string,0) ",0)=-2147216378(CPRMEXP_INVALID_VARIABLE)
TestDRMEvaluateExpression("max(NULL,-4)",-4)=-2147216378(CPRMEXP_INVALID_VARIABLE)
TestDRMEvaluateExpression("max(--0.1, .2)",2)=-2147216380(CPRMEXP_INVALID_TOKEN)
TestDRMEvaluateExpression("max(?,2)",2)=-2147216364(CPRMEXP_ISOLATED_OPERAND_OR_OPERATOR)
TestDRMEvaluateExpression("secstate.date = #20000226 12:00:00Z#;max(secstate.date,machine.datetime)",machine.datetime)=-2147216362(0X80041416, CPRMEXP_WRONG_TYPE_OPERAND)

9317: dateadd function should handle invalid data gracefully
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression("dateadd(\"day\",32,#20000226 12:00:00Z#)",1)=-2147216376(CPRMEXP_INVALID_ARGUMENT )
TestDRMEvaluateExpression("dateadd(\"h\",1,NULL)",1)=-2147216378(CPRMEXP_INVALID_VARIABLE)
TestDRMEvaluateExpression("dateadd(\"s\",-1,)",1)=-2147216370(CPRMEXP_INCORRECT_NUM_ARGS )
 
9319: datediff function handle invalid data with correct error code
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression("datediff(\"d\",20000101 12:00:00Z,#20000101 12:00:00Z#)",0)=-2147216364(CPRMEXP_ISOLATED_OPERAND_OR_OPERATOR)
TestDRMEvaluateExpression("datediff(\"day\",#20000101 12:00:00Z#,#20000101 12:00:00Z#)",0)=-2147216376(CPRMEXP_INVALID_ARGUMENT)
TestDRMEvaluateExpression("datediff(\"d\",#20001301 12:00:00Z#,#20001302 12:00:00Z#)",1)=-2147216379(CPRMEXP_INVALID_CONSTANT)
TestDRMEvaluateExpression("datediff(\"h\",#20000101 24:00:00Z#,#20000101 25:00:00Z#)",1)=-2147216379(CPRMEXP_INVALID_CONSTANT)

'' BUGBUG: length function no longer supported
''9323: index function fails for invalid data with correct error code
''TestLicEvalContextSetting(0,valid)
''TestDRMEvaluateExpression("index(NULL,\"abcde\")",0)=-2147216378(CPRMEXP_INVALID_VARIABLE )
''TestDRMEvaluateExpression("index(,\"abcde\")",0)=-2147216364(CPRMEXP_ISOLATED_OPERAND_OR_OPERATOR )
''TestDRMEvaluateExpression("index(\"abced ",\"abcde\")",0)=-2147216366(CPRMEXP_STRING_UNTERMINATED  )
''TestDRMEvaluateExpression("index(\"123\",1234)",0)=-2147216362(CPRMEXP_WRONG_TYPE_OPERAND )

'' BUGBUG: length function no longer supported
''9325: length function handle invalid data gracefully
''TestLicEvalContextSetting(0,valid)
''TestDRMEvaluateExpression("length(#20000101 12:00:00Z#)",20)=-2147216362(CPRMEXP_WRONG_TYPE_OPERAND)
''TestDRMEvaluateExpression("length(NULL)",0)=-2147216378(CPRMEXP_INVALID_VARIABLE)
''TestDRMEvaluateExpression("length(1234567890)",10)=-2147216362(CPRMEXP_WRONG_TYPE_OPERAND)

9327: test exists function with invalid arguments should fail with correct error code
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression("exists(4)",1)= -2147216369(CPRMEXP_VARIABLE_EXPECTED)
TestDRMEvaluateExpression("exists()",0)= -2147216370(CPRMEXP_INCORRECT_NUM_ARGS)
TestDRMEvaluateExpression("exists(NULL)",0)

'''Investigate later bug 3229
'9331: deletelicense without license in LicStore and other invalid data
'TestLicEvalContextSetting(0,valid)
'TestDRMEvaluateExpression("deletelicense("this")",1)= -2147216363(CPRMEXP_UNMATCHED )
'TestDRMEvaluateExpression("deletelicense(NULL)",1)= -2147216375(CPRMEXP_INVALID_CONTEXT )

''See the above versioncompare function does not implement, will add more cases after fix
9343: verify that versioncompare function can handle invalid data
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression("versioncompare(NULL,2.3.0.0)",0)=-2147216380(CPRMEXP_INVALID_TOKEN )

9344: verify that unsupport function names can be handled
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression("LENGTH(\"ABcde\")",5)=-2147216377(CPRMEXP_INVALID_FUNCTION )
TestDRMEvaluateExpression("Max(1,2)",2)=-2147216377(CPRMEXP_INVALID_FUNCTION )
TestDRMEvaluateExpression("mininum(2,1)",1)=-2147216377(CPRMEXP_INVALID_FUNCTION )

9704: evaluates operators without operands get correct error codes
TestLicEvalContextSetting(0,valid)
TestDRMEvaluateExpression(+,0)=-2147216373(CPRMEXP_MISSING_OPERAND)
TestDRMEvaluateExpression(-,0)=-2147216373(CPRMEXP_MISSING_OPERAND)
TestDRMEvaluateExpression(*,0)=-2147216364(CPRMEXP_ISOLATED_OPERAND_OR_OPERATOR)
TestDRMEvaluateExpression(/,0)=-2147216364(CPRMEXP_ISOLATED_OPERAND_OR_OPERATOR)
TestDRMEvaluateExpression(%,0)=-2147216364(CPRMEXP_ISOLATED_OPERAND_OR_OPERATOR)
TestDRMEvaluateExpression(=,0)=-2147216364(CPRMEXP_ISOLATED_OPERAND_OR_OPERATOR)
TestDRMEvaluateExpression(<,0)=-2147216364(CPRMEXP_ISOLATED_OPERAND_OR_OPERATOR)
TestDRMEvaluateExpression(||,0)=-2147216364(CPRMEXP_ISOLATED_OPERAND_OR_OPERATOR)
TestDRMEvaluateExpression(?:,0)=-2147216364(CPRMEXP_ISOLATED_OPERAND_OR_OPERATOR)
TestDRMEvaluateExpression(&&,0)=-2147216364(CPRMEXP_ISOLATED_OPERAND_OR_OPERATOR)
TestDRMEvaluateExpression(<=,0)=-2147216364(CPRMEXP_ISOLATED_OPERAND_OR_OPERATOR)
TestDRMEvaluateExpression(>=,0)=-2147216364(CPRMEXP_ISOLATED_OPERAND_OR_OPERATOR)
TestDRMEvaluateExpression(==,0)=-2147216364(CPRMEXP_ISOLATED_OPERAND_OR_OPERATOR)
TestDRMEvaluateExpression(!=,0)=-2147216364(CPRMEXP_ISOLATED_OPERAND_OR_OPERATOR)
TestDRMEvaluateExpression(++,0)=-2147216373(CPRMEXP_MISSING_OPERAND)
TestDRMEvaluateExpression(--,0)=-2147216373(CPRMEXP_MISSING_OPERAND)


